/**
 * 格式化Prompt生成器 - 让AI模型直接按格式输出
 */

export interface FormatRequirements {
  h1Style: string;
  h2Style: string;
  bodyStyle: string;
  outputFormat: 'html' | 'markdown';
}

// 标准格式要求
export const STANDARD_FORMAT_REQUIREMENTS: FormatRequirements = {
  h1Style: "黑体三号(16pt)，段前段后空1行，左对齐",
  h2Style: "黑体四号(14pt)，段前段后空0.5行，左对齐", 
  bodyStyle: "仿宋GB-2312小四号(12pt)，两端对齐，首行缩进两个字符",
  outputFormat: 'html'
};

/**
 * 生成格式化要求的Prompt
 */
export function generateFormatPrompt(requirements: FormatRequirements = STANDARD_FORMAT_REQUIREMENTS): string {
  const formatPrompt = `
🚨【强制格式要求 - 必须严格遵守】🚨

请按照以下格式要求输出内容，这是强制性要求，不可违反：

📋 格式规范：
1. 一级标题：${requirements.h1Style}
   必须使用：<h1 style="font-family: 'SimHei', '黑体', sans-serif; font-size: 16pt; font-weight: bold; text-align: left; margin-top: 1em; margin-bottom: 1em; line-height: 1.5;">标题内容</h1>

2. 二级标题：${requirements.h2Style}
   必须使用：<h2 style="font-family: 'SimHei', '黑体', sans-serif; font-size: 14pt; font-weight: bold; text-align: left; margin-top: 0.5em; margin-bottom: 0.5em; line-height: 1.5;">标题内容</h2>

3. 正文段落：${requirements.bodyStyle}
   必须使用：<p style="font-family: 'FangSong_GB2312', '仿宋_GB2312', '仿宋', serif; font-size: 12pt; text-align: justify; text-indent: 2em; line-height: 1.5; margin-bottom: 0.5em;">段落内容</p>

🚫【严禁使用的格式】：
- 禁止使用 # ## ### 等Markdown标题
- 禁止使用 **粗体** *斜体* 等Markdown语法
- 禁止使用 --- 分隔线
- 禁止使用 - * + 等Markdown列表标记
- 禁止输出纯文本，必须包含HTML标签

✅【必须遵守的输出要求】：
1. 直接输出HTML代码，不要任何解释
2. 每个段落必须用<p>标签包裹，包含完整样式
3. 每个标题必须用<h1>或<h2>标签，包含完整样式
4. 所有标签必须正确闭合
5. 输出的内容必须能直接在浏览器中显示并导出为Word文档

📝【标准输出模板】：
<h1 style="font-family: 'SimHei', '黑体', sans-serif; font-size: 16pt; font-weight: bold; text-align: left; margin-top: 1em; margin-bottom: 1em; line-height: 1.5;">文章主标题</h1>

<p style="font-family: 'FangSong_GB2312', '仿宋_GB2312', '仿宋', serif; font-size: 12pt; text-align: justify; text-indent: 2em; line-height: 1.5; margin-bottom: 0.5em;">这是正文段落，首行缩进两个字符，两端对齐，使用仿宋字体。</p>

<h2 style="font-family: 'SimHei', '黑体', sans-serif; font-size: 14pt; font-weight: bold; text-align: left; margin-top: 0.5em; margin-bottom: 0.5em; line-height: 1.5;">二级标题</h2>

<p style="font-family: 'FangSong_GB2312', '仿宋_GB2312', '仿宋', serif; font-size: 12pt; text-align: justify; text-indent: 2em; line-height: 1.5; margin-bottom: 0.5em;">继续正文内容...</p>

⚠️ 重要提醒：输出的HTML必须能够直接复制到Word文档中保持格式不变！
`;

  return formatPrompt.trim();
}

/**
 * 生成完整的创作Prompt（包含格式要求）
 */
export function generateFormattedCreationPrompt(
  originalPrompt: string,
  formatRequirements?: FormatRequirements
): string {
  const formatPrompt = generateFormatPrompt(formatRequirements);
  
  return `${originalPrompt}

${formatPrompt}

请基于以上要求进行创作，直接输出符合格式的HTML内容：`;
}

/**
 * 生成新闻报道格式Prompt
 */
export function generateNewsFormatPrompt(): string {
  return `
【新闻报道格式要求】
请按照标准新闻报道格式输出，使用HTML格式：

1. 标题：使用一级标题格式
2. 导语：第一段，概括新闻要点
3. 正文：按重要性递减顺序组织内容
4. 结构：倒金字塔结构
5. 语言：客观、准确、简洁

${generateFormatPrompt()}
`;
}

/**
 * 生成分析报告格式Prompt
 */
export function generateAnalysisFormatPrompt(): string {
  return `
【分析报告格式要求】
请按照标准分析报告格式输出，使用HTML格式：

1. 标题：使用一级标题格式
2. 摘要：简要概述分析要点
3. 背景：使用二级标题，介绍相关背景
4. 分析：使用二级标题，详细分析
5. 结论：使用二级标题，总结观点
6. 建议：使用二级标题，提出建议（如适用）

${generateFormatPrompt()}
`;
}

/**
 * 生成评论文章格式Prompt
 */
export function generateCommentaryFormatPrompt(): string {
  return `
【评论文章格式要求】
请按照标准评论文章格式输出，使用HTML格式：

1. 标题：使用一级标题格式，观点鲜明
2. 引言：引出话题，提出观点
3. 论证：使用二级标题分段论证
4. 反驳：适当考虑反面观点
5. 结论：重申观点，升华主题

${generateFormatPrompt()}
`;
}

/**
 * 根据写作类型获取对应格式Prompt
 */
export function getFormatPromptByType(writingType: string): string {
  switch (writingType) {
    case 'news_report':
    case 'news':
      return generateNewsFormatPrompt();
    case 'analysis':
    case 'analysis_report':
      return generateAnalysisFormatPrompt();
    case 'commentary':
    case 'opinion':
      return generateCommentaryFormatPrompt();
    default:
      return generateFormatPrompt();
  }
}

/**
 * 验证输出是否符合格式要求
 */
export function validateFormatOutput(content: string): {
  isValid: boolean;
  issues: string[];
} {
  const issues: string[] = [];
  
  // 检查是否包含HTML标签
  if (!content.includes('<h1') && !content.includes('<h2') && !content.includes('<p')) {
    issues.push('输出不包含必要的HTML格式标签');
  }
  
  // 检查标签是否正确闭合
  const openTags = content.match(/<(h1|h2|p|ul|ol|li)[^>]*>/g) || [];
  const closeTags = content.match(/<\/(h1|h2|p|ul|ol|li)>/g) || [];
  
  if (openTags.length !== closeTags.length) {
    issues.push('HTML标签未正确闭合');
  }
  
  // 检查是否包含样式
  if (!content.includes('font-family') || !content.includes('font-size')) {
    issues.push('缺少必要的样式定义');
  }
  
  return {
    isValid: issues.length === 0,
    issues
  };
}
